package main

import "fmt"

// 给定一个切片 s []int 和一个 int 类型的因子 factor，扩展 s 使其长度为 len(s) * factor。

func magnifiySlice(s []int, factor int) (r []int) {
	len_s := len(s)
	target_len := len_s * factor
	if len_s*factor <= cap(s) {
		r = s[:target_len]
	} else {
		// fmt.Println("target_len: ", target_len)
		r = make([]int, target_len)
		copy(r[:len_s], s)
	}
	return r
}

func main() {
	i := make([]int, 3, 6)
	i[1] = 2
	i[2] = 4
	j := magnifiySlice(i, 2)
	j[1] = 45
	// 没有发生扩容, i与j实际同为一个数组
	fmt.Println("origin slice: ", i)
	fmt.Println("new slice: ", j)

	k := magnifiySlice(i, 3)
	k[2] = 11
	// 发生扩容, k指向了新数组
	fmt.Println("origin slice: ", i)
	fmt.Println("new slice: ", k)

}
